#ifndef SDFDOF_H
#define SDFDOF_H

#include <osg/Node>
#include <osg/Vec3>
#include <vector>

class SDFContact;
class SDFDof : public osg::Node
{
public:
    SDFDof();
    virtual ~SDFDof();

    int getDofCount();
    std::vector<bool> getAxisSignal();

    void setSdfRigidPtrInt(int sdfRigidPtrInt);
    int getSdfRigidPtrInt();
    void setXAxisInWorldFrame(osg::Vec3& axis);
    void setYAxisInWorldFrame(osg::Vec3& axis);
    void setZAxisInWorldFrame(osg::Vec3& axis);

    osg::Vec3 getXAxisInWorldFrame();
    osg::Vec3 getYAxisInWorldFrame();
    osg::Vec3 getZAxisInWorldFrame();

    void setAxisSignal(std::vector<bool>& axisSignal);

    void printAxisSignal();

    void setContacts(std::vector<osg::ref_ptr<SDFContact> > contacts);
    void computeAxis();
protected:

private:
    osg::Vec3 m_xAxisInWorldFrame;
    osg::Vec3 m_yAxisInWorldFrame;
    osg::Vec3 m_zAxisInWorldFrame;

    std::vector<bool> m_axisSignal;//6 value, x+,x-,y+,y-,z+,z-
    int m_sdfRigidPtrInt;
    std::vector<osg::ref_ptr<SDFContact> > m_contacts;
};

#endif // SDFDOF_H
